Computer programs are often subject to analysis in order to make determinations regarding program performance. For example, an instrumented program is a program that includes additional code added to the original program to gather statistical and behavioral information regarding the program. In a performance analysis tool that tracks the timing of events in the computer system, this instrumentation adds overhead that may affect the gathered data. In a multithreaded analysis tool, the additional overhead may change which program events actually occur in the program and may alter the relative ordering of program events.
A cross-thread event is a program event involving a first program thread that provides a signal to a second thread, with the second thread being required to wait for the signal. The timing variations that are introduced by instrumentation can cause cross-thread events to become non-cross-thread events, and vice versa. Additional overhead may potentially serialize or dramatically increase the runtime for the program.
However, conventional performance analysis tools utilized with multithreading applications generally do not take into account that the tool itself may be changing the program behavior. Because of the unintended changes in program operation, conventional tools do not provide a sufficiently accurate portrayal of the original program execution flow. For example, conventional performance analysis tools merely report how much overhead a thread has experienced within its own execution and do not take into account how cross-thread events may effect the amount of overhead a thread has experienced due to thread interaction. Further, such tools do not allow a user to establish the amount of acceptable overhead or to adjust analysis in response to system performance.